clear; clc; close all;
% 在这个系统中，固定点需要满足：
%   x = a*(x + b*sin(3*x) + c)^2 + k*cos(q)*x
%   q = q - x.
%
% 从第二个方程 q = q - x 可知，必须有 x = 0
% 接下来把 x = 0 代入第一个方程，就得到：
%   0 = a*(0 + b*sin(0) + c)^2 + k*cos(q)*0 = a*c^2
%
% 这个等式只有在 c = 0 时才能成立。
% 一旦 c = 0 时，x = 0 自动满足固定点条件，而 q 没有额外限制
% 因为 q 的演化完全依赖 x，此时 x = 0 导致对 q 不产生约束
% 所以固定点集合就是 x = 0 且 q 任意，即一条固定点线。
% 当 c ≠ 0 时，系统没有固定点，可能会产生隐藏吸引子等

% 参数设置
a = 0.1;
b = 0.1;
c = 0;                % 固定 c = 0
k_values = [1.75, 1.85];  % 两种 k 值
x0 = 0.1;             % 初始 x 值
q0 = 0.1;             % 初始 q 值
transient = 100;      % 舍弃暂态的迭代次数
iterations = 100000;  % 记录阶段的总迭代次数

% 预分配存储矩阵
x_rec = zeros(iterations, length(k_values));
q_rec = zeros(iterations, length(k_values));

for idx = 1:length(k_values)
    k = k_values(idx);
    % 初始化状态
    x_current = x0;
    q_current = q0;
    
    % 暂态阶段
    for n = 1:transient
        [x_current, q_current] = mptm(x_current, q_current, a, b, c, k);
    end
    
    % 记录稳定后的数据
    for n = 1:iterations
        [x_current, q_current] = mptm(x_current, q_current, a, b, c, k);
        x_rec(n, idx) = x_current;
        q_rec(n, idx) = q_current;
    end
    
    subplot(1, 2, idx);
    plot(x_rec(:, idx), q_rec(:, idx), '.', 'MarkerSize', 1);
    xlabel('x_n');
    ylabel('q_n');
    title(sprintf('(吸引子) k = %.2f', k));
    axis tight;
    grid on;
end
